//    E参考代码

#include <bits/stdc++.h>
using namespace std;
const int MAXN = 2e5 + 5;
int n, w, q;
int pw[14];
char str[MAXN];
int now;
int a[2][MAXN];
int f[2][MAXN];
int main() {
  pw[0] = 1;
  for (int i = 1; i <= 13; ++i)
    pw[i] = pw[i - 1] * 3;
  scanf("% d", &n);
  scanf("% s", str + 1);
  now = 0;
  for (int i = 1; i <= pw[n]; ++i) {
    a[now][i] = str[i] == '1';
    f[now][i] = 1;
  }
  for (int i = n; i >= 1; --i) {           // 原来在第i层，现在要到第i-1层
    for (int j = 1; j <= pw[i - 1]; ++j) { // 3*j-2,3*j-1,3*ja
      f[now ^ 1][j] = a[now][3 * j - 2] == a[now][3 * j - 1] ? a[now][3 * j - 2]
                                                            : a[now][3 * j];
      if (a[now][3 * j - 2] == a[now][3 * j - 1] &&
          a[now][3 * j - 1] == a[now][3 * j]) {
        f[now ^ 1][j] =
            f[now][3 * j - 2] + f[now][3 * j - 1] + f[now][3 * j] -
            max({f[now][3 * j - 2], f[now][3 * j - 1], f[now][3 * j]});
      } else { //
        // 只需要从两个和 a[now ^ 1][j] 相同的选择一个反转就好了
        f[now ^ 1][j] = 1e9;
        for (int k = -2; k <= 0; ++k) {
          if (a[now][3 * j + k] == a[now ^ 1][j]) {
            f[now ^ 1][j] = min(f[now ^ 1][j], f[now][3 * j + k]);
          }
        }
      }
    }
    now ^= 1;
  } // f[ now][ 1]
  printf("%d\n", f[now][1]);
  return 0;
}